class FactorReconocimiento < ActiveRecord::Base
  belongs_to :area
  has_many :procesos
  has_and_belongs_to_many :cargos,:join_table => 'cargos_factores_reconocimientos'
  
  validates_presence_of :nombre,:peso,:descripcion
  validates_presence_of :cargo_ids,:if => Proc.new{|fr| !fr.general?},:message=>'  No se permite guardar un factor <<especifico>> sin seleccionar cargos'
  validates_uniqueness_of :nombre,:scope => :area_id
  
  default_scope :conditions=>{:deleted_at=>nil}
  named_scope :generales,:conditions=>{:area_id=>nil}
  named_scope :especificos,:conditions=>['area_id is not null']

  delegate :nombre, :to=>:area,:prefix=>true,:allow_nil=>true

  #TODO ver si existe la necesidad del campo TIPO
  TIPOS={'General'=>false,'Especifico'=>true}

  def nombre=(val)
    self[:nombre]=val.strip.titleize
  end

  def nombre_tipificado
    "#{nombre} (#{tipo_texto[0..0]})"
  end

  def area_id=(val)
    self[:area_id]=val
    self[:tipo]=TIPOS['Especifico'] unless val.to_s.empty?
  end

  def general?
    area_id.nil?
  end
  def especifica?
    !area_id.nil?
  end

  def nombre_con_area
    "#{area_nombre} | #{nombre}"
  end
  def nombre_con_tipo
    nombre+ (area_id.nil? ? ' (G)' : ' (E)')
  end

  def tipo_texto
    TIPOS.invert[!area_id.nil?]
  end

  def cargos_nombres
    general? ? 'Todos' : cargos.map(&:nombre). join(', ')
  end

  def procesos_nombres
    especifica? ? procesos.map(&:nombre). join(', ') : 'Todos'
  end

  def destroy
    self.deleted_at=Time.now
    save
  end
end
